Java Class ফাইল হল bytecode ধারণকারী একটি ফাইল, যা Java Source Code (.java ফাইল) কম্পাইল করার মাধ্যমে তৈরি হয়। এটি .class এক্সটেনশন নিয়ে থাকে এবং JVM (Java Virtual Machine) দ্বারা এক্সিকিউট করা হয়। Java Class File হলো Java bytecode যা প্ল্যাটফর্ম-স্বাধীন। এটি কোনো নির্দিষ্ট অপারেটিং সিস্টেমের জন্য নয়, বরং যেকোনো প্ল্যাটফর্মে JVM এর মাধ্যমে এক্সিকিউট করা যায়।
Java Class File এর গঠন:
একটি Java Class ফাইলের গঠন বেশ কয়েকটি অংশে বিভক্ত, যা নিম্নরূপ:
- Magic Number:
- Magic Number হল প্রথম 4 বাইট যা
.classফাইলের শুরুতে থাকে এবং এটি Java class ফাইলটির বৈধতা যাচাই করতে ব্যবহৃত হয়। - এটি একটি স্ট্যাটিক প্যাটার্ন:
0xCAFEBABE
- Magic Number হল প্রথম 4 বাইট যা
- Minor Version and Major Version:
- পরবর্তী দুটি বাইট Minor Version এবং Major Version এর জন্য সংরক্ষিত থাকে, যা Java class ফাইলের সংস্করণ (version) নির্দেশ করে।
- উদাহরণস্বরূপ, JDK 8 এর জন্য major version 52 এবং minor version 0 থাকে।
- Major Version:
- JDK 1.0: 45
- JDK 1.1: 45.3
- JDK 1.2: 46
- JDK 1.3: 47
- JDK 1.4: 48
- JDK 5: 49
- JDK 6: 50
- JDK 7: 51
- JDK 8: 52
- JDK 9: 53
- JDK 10: 54
- JDK 11: 55
- Constant Pool:
- Constant Pool হল একটি টেবিল যা class ফাইলের মধ্যে ব্যবহৃত সমস্ত স্থির মান (constant values) ধারণ করে, যেমন লিটারেল ভ্যালু, ক্লাস, মেথড, ফিল্ড রেফারেন্স ইত্যাদি।
- এটি class ফাইলের পরবর্তী অংশের জন্য মেমরি এড্রেস হিসাবে কাজ করে।
- Access Flags:
- Access Flags ২ বাইট দৈর্ঘ্য হয়ে থাকে এবং এটি class, মেথড বা ফিল্ডের অ্যাক্সেস কন্ট্রোল এবং বৈশিষ্ট্য নির্ধারণ করে। এটি বুঝতে সাহায্য করে যে:
- Class
publicবাfinalকিনা - মেথড
staticবাabstractকিনা - ফিল্ড
finalকিনা
- Class
- Access Flags ২ বাইট দৈর্ঘ্য হয়ে থাকে এবং এটি class, মেথড বা ফিল্ডের অ্যাক্সেস কন্ট্রোল এবং বৈশিষ্ট্য নির্ধারণ করে। এটি বুঝতে সাহায্য করে যে:
- This Class and Super Class:
- এই অংশে class এর নিজের রেফারেন্স (this class) এবং superclass এর রেফারেন্স (super class) দেওয়া থাকে। এটি class এর হায়ারার্কি দেখায়।
- Interfaces:
- যদি class কোনো interface ইমপ্লিমেন্ট করে থাকে, তবে তার রেফারেন্স এই অংশে থাকে। একাধিক interfaces থাকলে তাদের রেফারেন্স একটি তালিকা (list) আকারে থাকে।
- Fields (ফিল্ড):
- Fields অংশে class এর সমস্ত ফিল্ডের তথ্য থাকে, যেমন:
- ফিল্ডের নাম
- ফিল্ডের টাইপ
- ফিল্ডের অ্যাক্সেস ফ্ল্যাগ (যেমন
public,private,static,final)
- Fields অংশে class এর সমস্ত ফিল্ডের তথ্য থাকে, যেমন:
- Methods (মেথড):
- Methods অংশে class এর সমস্ত মেথডের তথ্য থাকে। এতে থাকে:
- মেথডের নাম
- মেথডের প্যারামিটার টাইপ
- মেথডের রিটার্ন টাইপ
- মেথডের অ্যাক্সেস ফ্ল্যাগ (যেমন
public,private,static,final)
- Methods অংশে class এর সমস্ত মেথডের তথ্য থাকে। এতে থাকে:
- Attributes:
- Attributes অংশে class, methods, এবং fields এর সাথে সম্পর্কিত অতিরিক্ত তথ্য থাকে, যেমন:
- Code attribute: মেথডের bytecode।
- Exceptions attribute: যেগুলি exception throw হতে পারে।
- LineNumberTable: বাইটকোডের সাথে সঙ্গতিপূর্ণ সোর্স কোডের লাইনের জন্য টেবিল।
- LocalVariableTable: লোকাল ভেরিয়েবলগুলির তথ্য।
- Attributes অংশে class, methods, এবং fields এর সাথে সম্পর্কিত অতিরিক্ত তথ্য থাকে, যেমন:
- Bytecode:
- এটি class ফাইলের অন্যতম গুরুত্বপূর্ণ অংশ, যেখানে ক্লাসের কার্যকর কোড (bytecode) থাকে যা JVM দ্বারা এক্সিকিউট হয়। মেথডের কাজের জন্য এটি নির্দিষ্ট ইনস্ট্রাকশন ধারণ করে।
Java Class File এর গঠন (Structure):
- Magic Number (4 bytes):
0xCAFEBABE - Minor Version (2 bytes)
- Major Version (2 bytes)
- Constant Pool (variable length)
- Access Flags (2 bytes)
- This Class (2 bytes)
- Super Class (2 bytes)
- Interfaces (variable length)
- Fields (variable length)
- Methods (variable length)
- Attributes (variable length)
- Bytecode (variable length)
Java Class File Example:
একটি সাধারণ Java ক্লাসের কম্পাইল করা .class ফাইলের গঠন উদাহরণ:
Java Source Code:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
Generated Bytecode (Class File):
- Magic Number:
CAFEBABE - Major Version:
52(Java 8) - Constant Pool: Contains string constants like "HelloWorld", "main", etc.
- Access Flags:
public,class - Methods: Contains method information like
mainmethod. - Bytecode: The actual instructions that the JVM will execute (e.g.,
getstatic,invokevirtual, etc.).
Class File Format Summary:
| Section | Description |
|---|---|
| Magic Number | 0xCAFEBABE - Identifies the class file format. |
| Minor & Major Version | Specifies the version of the class file format. |
| Constant Pool | Contains all constants used in the class (strings, field, method references). |
| Access Flags | Specifies the access level of the class (public, private, static, etc.). |
| This Class & Super Class | References to the current class and its superclass. |
| Interfaces | List of interfaces implemented by the class. |
| Fields | Contains the fields (variables) defined in the class. |
| Methods | Contains method details (name, parameters, return type). |
| Attributes | Includes code and other metadata attributes (e.g., line number, local variables). |
| Bytecode | Actual bytecode instructions that are executed by the JVM. |
Java Class ফাইল একটি অত্যন্ত গুরুত্বপূর্ণ উপাদান, যেটি Java source code কম্পাইল করার মাধ্যমে তৈরি হয়। এই ফাইলের গঠনটি নির্দিষ্ট ফর্ম্যাটে থাকে, যার মধ্যে magic number, versioning, constant pool, methods, fields, এবং bytecode সহ অনেক অন্যান্য তথ্য থাকে। JVM এই .class ফাইলটি লোড করে এবং bytecode এক্সিকিউট করে Java প্রোগ্রাম চালায়।
Read more